package cn.tedu.oop;
/*本类用作抽象测试的入门案例*/
public class AbstractDemo {
    public static void main(String[] args) {
        /*抽象类不可以实例化*/
        //Animal a=new Animal();
        Animal a=new Pig();
        a.eat();
        a.play();
        a.fly();
        a.fly2();

    }

}
/*2.被abstract修饰的类是抽象类
* 如果一个类中包含了抽象方法，那么这个类必须被声明成一个抽象类
* 抽象类中可以只包含普通方法*/
abstract class  Animal{
    public void eat(){
        System.out.println("吃啥都行");
    }
    public void play(){
        System.out.println("玩啥都行");
    }
    /*1.被abstract修饰的方法是抽象方法，抽象方法没有方法体*/
    public abstract void fly();
    public abstract void fly2();
}
/*3.当一个子类继承了抽象父类以后，有两种解决方案
方案一：。法---父债子还
* */
//abstract class Pig extends Animal{//方案一
class Pig extends Animal{//方案二
    @Override//注解：重写
    public void fly() {
        System.out.println("父债子还，还清了");
        System.out.println("飞起来吧，猪宝宝");
    }

    @Override
    public void fly2() {
        System.out.println("抽象父类中的所有抽象方法都需要被实现");
    }


}